package algorithm7.leetcode.每日一题.YEAR2023.month5;

import org.junit.jupiter.api.Test;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @Author: permission
 * @Date: 2023/5/13 21:41
 * @Version: 1.0
 * @ClassName: DAY20230513_LC2441
 * @Description: 2441. 与对应负数同时存在的最大正整数
 */
public class DAY20230513_LC2441 {

/*
给你一个 不包含 任何零的整数数组 nums ，找出自身与对应的负数都在数组中存在的最大正整数 k 。
返回正整数 k ，如果不存在这样的整数，返回 -1 。

示例 1：
输入：nums = [-1,2,-3,3]
输出：3
解释：3 是数组中唯一一个满足题目要求的 k 。

示例 2：
输入：nums = [-1,10,6,7,-7,1]
输出：7
解释：数组中存在 1 和 7 对应的负数，7 的值更大。
 */
    public int findMaxK(int[] nums) {
//        return handle1(nums);
        return handle2(nums);
    }

    private int handle2(int[] nums) {
        int k = -1;
        Set<Integer> set = new HashSet<Integer>();
        for (int x : nums) {
            set.add(x);
        }
        for (int x : nums) {
            if (set.contains(-x)) {
                k = Math.max(k, x);
            }
        }
        return k;
    }

    private int handle1(int[] nums) {
        List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
        int res = -1;
        for (Integer a : list) {
            if (list.contains(a * -1)) {
                res = Math.max(res, Math.abs(a));
            }
        }
        return res;
    }


    @Test
    void t1() {
        int[] nums = {-1,2,-3,3};
        int res = findMaxK(nums);
        System.out.println("res = " + res);
    }

}
